
package com.be.beadmin.project.service;

import com.be.beadmin.common.entity.PageEntity;
import com.be.beadmin.project.dto.input.*;
import com.be.beadmin.project.dto.output.*;
import com.be.beadmin.project.entity.BatchPlan;
import com.be.beadmin.project.entity.PlanStage;
import org.springframework.data.domain.Page;

import java.util.List;

/**
* @description 服务接口
* @author ljh
* @date 2023-02-05
**/


public interface BatchPlanService {

    /**
    * 分页的查询接口
    * @param pageEntity
    * @return
    */
    Page<BatchPlanEx> getBatchPlanByPage(PageEntity pageEntity);


    void updateBatchProductBatchInfo(String masterPlanId, Integer batchTotalCount, Integer currentBatch);


    /**
     * 根据id获取批次计划
     * @param batchPlanId
     * @return
     */
    BatchPlan getBatchPlanById(String batchPlanId);
    /**
    * @param batchPlanDto
    */
    void addBatchPlan(BatchPlanDto batchPlanDto);

    int updateBatchPlanCount(String batchPlanId);

    BatchPlan addBatchPlan(BatchPlanInfoFormDto infoDto);

    /**
     * 生成初始批次计划
     * @param infoDto
     * @return
     */
    int addInitBatchPlan(BatchPlanInfoFormDto infoDto);

    /**
     * 生成初始批次计划
     * @param masterPlanId
     * @return
     */
    int addInitBatchPlan(String masterPlanId);

    /**
    * @param batchPlanDto
    */
    void updateBatchPlan(BatchPlanDto batchPlanDto);


    /**
    * 删除多个角色
    * @param ids
    */
    void delBatchPlans (List<String> ids);

    /**
     * 生成添加批次计划的表单项
     * @param infoId
     * @return
     */
    BatchPlanInfoFormEx genAddBatchPlanForm(String infoId);
    /**
     * 生成修改批次计划的表单项
     * @param batchPlanId
     * @return
     */
    BatchPlanInfoFormEx genUpdateBatchPlanForm(String batchPlanId);

    /**
     * 修改一个项目批次计划的基础时间
     * @param batchPlanDto
     */
    void updateBatchPlanTime(BatchPlanDto batchPlanDto);

    /**
     * 修改一个项目批次计划的柜体信息
     * @param batchPlanDto
     */
    int updateBatchPlanProduct(BatchPlanInfoFormDto batchPlanDto);



    /**
     * 根据项目Id获取批次计划分页信息
     * @param infoAndPage
     * @return
     */
    Page<BatchPlanEx> getBatchPlanByPageAndInfoId(InfoAndPage infoAndPage);

    /**
     * 根据项目Id获取批次计划及各阶段分页信息
     * @param infoAndPage
     * @return
     */
    Page<BatchPlanAndStageEx> getBatchPlanAndStageByPageAndInfoId(InfoAndPage infoAndPage);

    /**
     * 修改一个批次计划各阶段时间
     * @param planStageDtos
     */
    void updateBatchPlanStageTime(List<PlanStageDto> planStageDtos);

    /**
     * 根据计划及阶段名获取该阶段
     * @param batchPlan
     * @param stageName
     * @return
     */
    PlanStage getStageByBatchPlanAndStageName(BatchPlan batchPlan,String stageName);

    /**
     * 获取所有批次计划及各阶段分页信息
     * @param pageEntity
     * @return
     */
    Page<BatchPlanAndStageEx> getBatchPlanAndStageByPage(PageEntity pageEntity);

    /**
     * 获取该批次计划所有的柜体数量
     * @param batchPlanId
     */
    int countProductByBatchPlan(String batchPlanId);


    /**
     * 获取该批次计划所有的柜体数量
     * @param batchPlanId
     */
    int countProductByBatchPlanAndType(String batchPlanId,String type);

    int countUnAssginProduct(String infoId);

    /**
     * 获取批次号
     * @return
     */
    List<String> getBatchPlanCode();
//    /**
//     * 获取批次计划的简单分页信息，生产排程中需要用到
//     * @param pageEntity
//     * @return
//     */
//    Object getBatchPlanInProductByPage(PageEntity pageEntity);
}